﻿#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;

const int N = 300010;

int n, m;
int a[N], s[N];//s[N]表示前缀和
vector<int> alls; //离散化后的结果
typedef pair<int, int> PII;
/*
用typedef声明一个新类型名来代替已有的类型名
typedef int Status;   //指定标识符Status代表int类型
typedef double DATE;  //指定标识符DATE代表double类型

这样下面代码等价：

int i; double j;
Status i; DATE j;
*/

//使用了typedef后，两者等价
//vector<pair<int, int>>add, query;
vector<PII>add, query;

int find(int x)
{
	int l = 0, r = alls.size() - 1;
	while (l < r)
	{
		int mid = l + r >> 1;
		if (alls[mid] >= x)r = mid;
		else l = mid + 1;
	}
	return r + 1;
}
int main() 
{
	std::cin.tie(0);
	std::ios::sync_with_stdio(false);
	
	cin >> n >> m;

	for (int i = 0; i < n; i++) 
	{
		int x, c;
		cin >> x >> c;
		add.push_back({x,c});//
		alls.push_back(x);
	}
	for (int i = 0; i < m; i++) 
	{
		int l, r;
		cin >> l >> r;
		query.push_back({l,r});
		alls.push_back(l);
		alls.push_back(r);
	}
	//排序
	sort(alls.begin(), alls.end());
	//去重
	alls.erase(unique(alls.begin(), alls.end()), alls.end());
	
	/*register：这个关键字请求编译器尽可能的将
	变量存在CPU内部寄存器中，而不是通过内存寻址
	访问,以提高效率*/

	//for(register int i=0;i<add.size();i++){auto item=add[i];}
	/*for (register int i = 0; i < add.size(); i++)
	{
		auto item=add[i];
		int x = find(item.first);
		a[x] += item.second;
	}*/
	//add表示一个容器或数组，item循环变量，循环条件是add的元素个数大于0
	
	for (auto item : add) 
	{
		int x = find(item.first);
		a[x] += item.second;
	}
	//预处理前缀和
	for (int i = 1; i <= alls.size(); i++)
	{
		s[i] = s[i - 1] + a[i];
	}
	//处理询问
	for (auto item : query) 
	{
		int l = find(item.first), r = find(item.second);
		cout << s[r] - s[l - 1] << endl;
	}
	system("pause");
	return 0;
};